# 定义目录变量
INCLUDE_DIR = include
SRC_DIR = src
LIB_DIR = lib

# 查找源文件和生成目标文件列表
SRCS = $(wildcard $(SRC_DIR)/*.c)
OBJS = $(patsubst $(SRC_DIR)/%.c, $(LIB_DIR)/%.o, $(SRCS))

# 定义静态库和可执行程序名称
STATIC_LIB = $(LIB_DIR)/libcal.a
TARGET = main-v1

# 定义编译器和编译选项
CC = gcc
CFLAGS = -I$(INCLUDE_DIR)

# 默认目标
all: $(TARGET)

# 链接生成可执行程序
$(TARGET): $(STATIC_LIB) main.c
    $(CC) $(CFLAGS) -o $@ main.c -L$(LIB_DIR) -lcal

# 创建静态库
$(STATIC_LIB): $(OBJS)
    ar rcs $@ $^

# 编译源文件生成目标文件
$(LIB_DIR)/%.o: $(SRC_DIR)/%.c
    $(CC) $(CFLAGS) -c $< -o $@

# 清理生成的文件
.PHONY: clean
clean:
    rm -f $(LIB_DIR)/*.o $(STATIC_LIB) $(TARGET)    
